<?php
require_once('DataAccess.php');
require_once('NomePrograma.php');

/**
Interface DAO de Programa. Estes m�todos N�O devem ser chamados diretamente.
Ao inv�s disso devem ser chamados por m�todos da classe Programa.
*/

class NomeProgramaDAO
{
      private $database;

      public function __construct( )
      {
               $this->database = DataAccess::getConnection();
      }
      
      public function  CadastrarPrograma( $programa )
      {
      	$consulta = $this->database->Fetch("BEGIN");
      	
      	if ( $consulta )
      	{
      		$ano = $programa->ano;
      		$consulta = $this->database->Fetch("INSERT into t_nome_programa (t_ano_id , nome )
      											VALUES('$ano->id','$programa->nome')");
      		if( $consulta )
      		{
      			$this->database->Fetch("COMMIT");
      			return TRUE;
      		} 
      		else
      		{
      			$this->database->Fetch("ROLLBACK");
      			return FALSE;
      		}
      	}
      	else
      	{
      		$this->database->Fetch("ROLLBACK");
      		return FALSE;
      	}
      		
      }
      
      public function AlterarPrograma( $programa )
      {
      	$consulta = $this->database->Fetch("BEGIN");
      	
      	if( $consulta )
      	{
      		$consulta = $this->database->Fetch("UPDATE t_nome_programa 
      											SET nome = '$programa->nome'
      											where id = '$programa->id'");
      		if ( $consulta )
      		{
      			$this->database->Fetch("COMMIT");
      			return TRUE;
      		}
      		else
      		{
      			$this->database->Fetch("ROLLBACK");
      		}
      	}
      	else
      	{
      		$this->database->Fetch("ROLLBACK");
      	}
      }
      
      public function ExcluirPrograma( $programaId )
      {
      	$consulta = $this->database->Fetch("BEGIN");
      	
      	if( $consulta )
      	{
      		$consulta = $this->database->Fetch("Delete from t_nome_programa where id = '$programaId'");
      		
      		if ( $consulta )
      		{
      			$this->database->Fetch("COMMIT");
      			return TRUE;
      		}
      		else
      		{
      			$this->database->Fetch("ROLLBACK");
      		}
      	}
      	else
      	{
      		$this->database->Fetch("ROLLBACK");
      	}
      	
      }

      /**
      Busca na tabela t_nome_programa por todos os registros de programa que possuam chave-estrangeira $anoId.
      Para cada registro encontrado ser� criada uma inst�ncia de Programa com os valores das colunas do registro em quest�o.
      Por fim, caso sejam encontrados registros, todas as inst�ncias criadas ser�o inseridas dentro de um array que ser� retornado por este m�todo.
      Caso contr�rio, ser� retornado FALSE indicando que n�o foi encontrado nenhum registro.
      @anoId - Chave-prim�ria do ano ao qual o programa est� vinculado.
      @return - Retorna um array de objetos do tipo Programa. Caso n�o encontre nenhum resultado, retorna FALSE.
     */
      public function LoadProgramas( $anoId )
      {
             $consulta = $this->database->Fetch(" SELECT * FROM t_nome_programa WHERE t_ano_id = '$anoId' order by nome");
             if( $consulta != FALSE )
             {
                  $rows = $this->database->getRow();
                  $objetos = array();

                  for( $i = 0; $i < count($rows); $i++ )
                  {
                       $programa = new NomePrograma();
                       $programa->id = $rows[$i]['id'];
                       $ano = new Ano();
                       $anoSelecionado = $ano->CarregarAno( $rows[$i]['t_ano_id'] );
                       $programa->ano = $anoSelecionado;
                       $programa->nome = $rows[$i]['nome'];

                       $objetos[] = $programa;
                  }

                  return $objetos;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }
      
      /**
      Busca na tabela t_nome_programa pelo registro associado � chave-prim�ria $id.
      Caso um registro seja encontrado ser� criada uma inst�ncia de Programa com os valores das colunas do registro em quest�o.
      @id - Chave-prim�ria do Programa cadastrado no banco de dados.
      @return - Retorna um objeto Programa com as informa��es encontradas no registro. Caso n�o encontre nenhum resultado, retorna FALSE.
      */
      public function LoadPrograma( $id )
      {
             $consulta = $this->database->Fetch("SELECT * FROM t_nome_programa WHERE ID = '$id'");
             if( $consulta != FALSE )
             {
                 $rows = $this->database->getRow();
                 $programa = new NomePrograma();
                 $programa->id = $rows[0]['id'];
                 $ano = new Ano();
                 $anoId = $rows[0]['t_ano_id'];
                 $anoSelecionado = $ano->CarregarAno( $anoId );
                 $programa->ano = $anoSelecionado;
                 $programa->nome = $rows[0]['nome'];

                 return $programa;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }
      
    
}
?>
